package com.qdlc.p2p.dal.dao;

import java.util.Date;
import java.util.List;

import com.qdlc.p2p.dal.common.model.jpa.PageDataList;
import com.qdlc.p2p.dal.dto.AccountCash;
import com.qdlc.p2p.dal.model.AccountCashModel;

/**
 * 提现Dao
 *
 * @author xx
 * @version 2.0
 * @since 2014年3月17日
 */
public interface AccountCashDao{

	/**
	 * 插入记录
	 * @param accountCash
	 */
	void insert(AccountCash accountCash);
	
	/**
	 * 更新记录
	 * @param accountCash
	 */
	void update(AccountCash accountCash);
	
	/**
	 * 根据Id查找
	 * @param id
	 * @return
	 */
	AccountCash findById(long id);
	
	/**
	 * 查询用户提现记录
	 * @param userId
	 * @param status
	 * @return
	 */
	List<AccountCash> findByUserId(long userId, int status);

    List<AccountCash> findByLimitAddTime(int status, Date addTime);

    /**
     * 提现金额信息
     *
     * @param userId
     */
    AccountCash getCashMessage(long userId);

    /**
     * 更新状态
     *
     * @param id
     * @param status
     * @param preStatus
     */
    void updateStatus(long id, int status, int preStatus);

    /**
     * 统计等待审核的体现总数
     *
     * @param status
     * @return
     */
    int count(int status);

    /**
     * 投资人累计提现金额总和
     *
     * @return
     */
    double allCashMoney();

    /**
     * 根据时间得到平台支付提现手续费
     *
     * @param date
     * @return
     */
    double getCashFeeByDate(String date);

    /**
     * 获取申请中的提现次数
     *
     * @param userId
     * @return
     */
    int getApplyingCount(long userId);

    /**
     * 获取当日提现次数(不含提现失败)
     *
     * @param userId
     * @return
     */
    int getSingleDaytime(long userId);

    /**
     * 获取当日提现总额(不含提现失败)
     *
     * @param userId
     * @return
     */
    double getSingleDayAmount(long userId);

    /**
     * 获取本月已免提现手续费次数(不含提现失败)
     *
     * @param userId
     * @return
     */
    int getMonthFreeFeeTime(long userId);

    /**
     * 提现审核 修改方法
     *
     * @param id
     * @param status
     * @param preStatus
     * @param verifyRemark
     * @param verifyUserName
     */
    void verifyCash(long id, int status, int preStatus, String verifyRemark, String verifyUserName);

    /**
     * 根据订单号查询取现信息
     *
     * @param orderNo
     * @return
     */
    AccountCash getAccountCashByOrderNo(String orderNo);

    /**
     * 提现记录
     *
     * @param userId
     * @return
     */
    PageDataList<AccountCashModel> list(long userId, int startPage, AccountCashModel model);

    /**
     * 提现审核记录列表
     *
     * @param model
     * @return
     */
    PageDataList<AccountCashModel> accountCashList(AccountCashModel model);

    /**
     * 获取该用户提现待付手续费
     */
    double getWithdrawCashManageFeeByUserId(long userId);

    /**
     * 根据时间获取提现总数
     * @param date
     */
    double getWithdrawAmountByDate(String date);

}
